package main

import (
	"context"
	"fmt"
	"log"
	"net"

	"gitee.com/cdsfish/skills/grpc/hello"
	"google.golang.org/grpc"
)

func main() {
	//首先是通过grpc.NewServer创建一个grpc服务对象
	grpcServer := grpc.NewServer()

	//net/rpc ---> grpc
	// 1.注册需要暴露的rpc对象给grpc框架
	hello.RegisterHelloServiceServer(grpcServer, &HelloServiceImpl{})

	lis, err := net.Listen("tcp", ":1234")
	if err != nil {
		log.Fatal(err)
	}
	// 2.然后通过grpcServer.Serve(lis)在一个监听端口上提供gRPC服务
	grpcServer.Serve(lis)

}

// HelloService的服务器端实现 Controller
type HelloServiceImpl struct {
	//继承grpc标准实现对象
	//继承+ 重写(Overwrite)
	hello.UnimplementedHelloServiceServer
}

// 实现HelloServiceServer接口 hello方法
func (i *HelloServiceImpl) Hello(ctx context.Context, in *hello.HelloRequest) (*hello.HelloResponse, error) {
	resp := &hello.HelloResponse{}
	resp.Message = fmt.Sprintf("Hello %s", in.Name)

	return resp, nil
}
